/**
 * Store 的命名空间
 *
 *    当我们没有开启命名空间配置时，多个 store module 的 action、mutation、getter 都是注册在全局命名空间上的。会带来如下问题：
 *
 *      1. getter 重名会报错
 *      2. 同名的 mutation 与同名的 action 在触发时，都会被调用
 *
 * 如何开启命名空间
 *      每一个 module 都设置上 namespaced: true
 *
 * 开启了命名空间的模块，内部的 getter、action、mutation 调用时需要带上当前模块的名字
 *
 *      1. mutation
 *        this.$store.commit('模块名/xxMutationName')
 *        mapMutations('模块名', ['xxMutationName'])
 *
 *      2. action
 *        this.$store.dispatch('模块名/xxActionName')
 *        mapActions("模块名", ['xxActionName'])
 *
 *      3. getters
 *        this.$store.getters['模块名/xxGetterName']
 *        mapGetters('模块名', ['xxGetterName'])
 *
 *      4. state
 *        this.$store.state.模块名.xx数据
 *        mapState('模块名', ['xx数据'])
 *
 *
 *
 */

import { createStore } from "vuex";

import createPersistedState from "vuex-persistedstate";

import moduleA from "./modules/module-a";
import moduleB from "./modules/module-b";

const store = createStore({
  // Root 模块
  modules: {
    a: moduleA,
    b: moduleB,
  },

  plugins: [
    createPersistedState({
      key: "abcd", // 默认为 vuex
      paths: ["a.msg"], // 控制需要存储的字段
      storage: window.sessionStorage, // 存储到 sessionStorage
    }),
  ],
});

export default store;
